import random
import sys

import pyperclip
import pprint

"""
使用国内的源安装模块
pip install --index-url https://pypi.douban.com/simple PyMySQL
pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple mysql-connector
python.exe -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
"""

print("=====================字符串常用操作================================")
print('abc' * 3)
print("转义字符演示：\nHello ! How are you?\nI\'m fine.\" \\")
# 在字符串开始的引号之前加上 r，使它成为原始字符串：完全忽略转义字符，打印倒斜杠
print(r'That is Carol\'s cat.')
spam = 'Hello world! /'
print(spam.replace('/', '', 1))
print(spam)
print(spam[1])  # 字符串截取
print(spam[-2])
print(spam[0:5])
print(spam[:5])
print(spam[6:])
print("hello" not in spam)
print("字母转小写：" + spam.lower() + ",字母转大写：" + spam.upper())
print(spam.islower() or spam.isupper())  # 判断字符串中所有字母是否全是大写或小写
# isalpha()返回 True，如果字符串只包含字母，并且非空；
# isalnum()返回 True，如果字符串只包含字母和数字，并且非空；
# isdecimal()返回 True，如果字符串只包含数字字符，并且非空；
# isspace()返回 True，如果字符串只包含空格、制表符和换行，并且非空；
# istitle()返回 True，如果字符串仅包含以大写字母开头、后面都是小写字母的单词
print("10".isdigit())  # 是否整数
print(spam.startswith("Hello") and spam.endswith("!"))
print(', '.join(['cats', 'rats', 'bats']))
print('My name is Simon'.split())  # split
print('My、name、is、Simon'.split('、'))
print('Hello'.rjust(20, '*'))  # 文本对齐
print('Hello'.ljust(20, '*'))
print('Hello'.center(20, '*'))
spam = ' Hello World '
print("[" + spam.strip() + "]")  # 去空格
print("[" + spam.lstrip() + "]")
print("[" + spam.rstrip() + "]")
# 删除字符串两端出现的 a、m、p 和 S。以下写法效果一样：strip('ampS')、strip('mapS')、 strip('Spam')
print('SpamSpamBaconSpamEggsSpamSpam'.strip("ampS"))
# pyperclip 模块有 copy()和 paste()函数，可以向计算机的剪贴板发送文本，或从它接收文本。
pyperclip.copy('向计算机的剪贴板发送文本')
print(pyperclip.paste())  # 从剪贴板接收文本

'''
# 等待用户在键盘上输入一些文本，并按下回车键
print(">>>", end="", flush=True)
name = input()
print(len(name))
'''

# 从标准输入中获取一行用户的输入内容，并去除两头的空格
# a = sys.stdin.readline().strip()
# print(a)

print("=====================随机数、列表乱序================================")
print(random.randint(1, 10))
print(random.choice(range(10)))  # 随机挑选一个元素

# 将一个列表中的元素打乱
a = [10, 20, 30, 40, 50, 60]
random.shuffle(a)
print(a)

# 取列表的指定长度的随机数，但是不会改变列表本身的排序：
a = [0, 1, 2, 3, 4]
rs = random.sample(a, 2)
print(rs)
print(a)

print("===================漂亮打印pprint=======================")
myCat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'}
spam = ['cat', 'bat', 'rat', 'elephant', 'abc']
myCat.setdefault("list", spam)
pprint.pprint(myCat)

print("===================数据压缩=======================")
import zlib

s = b'witch which has which witches wrist watch'
print('压缩前长度：', len(s))
t = zlib.compress(s)  # 数据压缩
print('压缩后长度：', len(t))
print(zlib.decompress(t))  # 数据解压缩
print(zlib.crc32(s))

print("===================性能度量=======================")
from timeit import Timer

t1 = Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
t2 = Timer('a,b = b,a', 'a=1; b=2').timeit()
print(t1, t2, sep='\n')

print("===================打印心形=======================")
print('\n'.join([''.join([('Love'[(x - y) % 4] if ((x * 0.05) ** 2 + (y * 0.1) ** 2 - 1) ** 3 - (x * 0.05) ** 2 * (
            y * 0.1) ** 3 <= 0 else ' ') for x in range(-30, 30)]) for y in range(15, -15, -1)]))
